package com.hzit.canal.listener;

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@CanalEventListener
public class CanalEventDataListener {

	@Autowired
	private StringRedisTemplate redisTemplate;
	//1. 代表当对hzitmanager这个数据库中的所有表进行插入操作时，会被自动触发
	// @InsertListenPoint
	// public void onEventInsert(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
	// 	System.out.println("onEventInsert");
	// 	System.out.println("------------------------------------------------------------------------------------");
	// 	for (CanalEntry.Column column : rowData.getAfterColumnsList()) {
	// 		//1.1 获取列名
	// 		String name = column.getName();
	// 		//1.2 获取列值
	// 		String value = column.getValue();
	// 		//1.3 打印
	// 		System.out.println(name + "====>" + value);
	// 	}
	// }
	//2. 代表当对hzitmanager这个数据库中的所有表进行修改操作时，会被自动触发
	// @UpdateListenPoint
	// public void onEventUpdate(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
	// 	System.out.println("onEventUpdate");
	// 	System.out.println("------------------------------------------------------------------------------------");
	// 	System.out.println("修改前：");
	// 	for (CanalEntry.Column column : rowData.getBeforeColumnsList()) {
	// 		//1.1 获取列名
	// 		String name = column.getName();
	// 		//1.2 获取列值
	// 		String value = column.getValue();
	// 		//1.3 打印
	// 		System.out.println(name + "【old】====>" + value);
	// 	}
	// 	System.out.println("修改后：");
	// 	for (CanalEntry.Column column : rowData.getAfterColumnsList()) {
	// 		//1.1 获取列名
	// 		String name = column.getName();
	// 		//1.2 获取列值
	// 		String value = column.getValue();
	// 		//1.3 打印
	// 		System.out.println(name + "【new】====>" + value);
	// 	}
	// }

	//3. 代表当对hzitmanager这个数据库中的所有表进行删除操作时，会被自动触发
	// @DeleteListenPoint
	// public void onEventDelete(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
	// 	System.out.println("onEventDelete");
	// 	System.out.println("删除之前数据：");
	// 	for (CanalEntry.Column column : rowData.getBeforeColumnsList()) {
	// 		//1.1 获取列名
	// 		String name = column.getName();
	// 		//1.2 获取列值
	// 		String value = column.getValue();
	// 		//1.3 打印
	// 		System.out.println(name + "【delete】====>" + value);
	// 	}
	// }

	//4. 自定义监听器，可以同时监听增、删除、改
	@ListenPoint(table = {"tb_brand","tb_content"},
			    eventType={CanalEntry.EventType.INSERT,CanalEntry.EventType.UPDATE,CanalEntry.EventType.DELETE})
	public void onCustomEvent(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
		//4.1 区分不同的操作
		// if (eventType == CanalEntry.EventType.INSERT) {
		// 	System.out.println("insert");
		// }
		// if (eventType == CanalEntry.EventType.UPDATE) {
		// 	System.out.println("update");
		// }
		// if (eventType == CanalEntry.EventType.DELETE) {
		// 	System.out.println("delete");
		// }
		//4.2 当我们对上面table属性指定的表，进行增、删除、改操作时，就会自动清空缓存
		if(eventType == CanalEntry.EventType.INSERT || eventType == CanalEntry.EventType.UPDATE || eventType == CanalEntry.EventType.DELETE){
			System.out.println("正在清空redis。。。。");
			redisTemplate.delete("contents");
		}
	}
}
